import { isEmpty } from 'lodash-es';
import { isNotEmpty } from '@/utils/is'; 
import type { Rule } from 'ant-design-vue/es/form';
function validateContact(_rule: Rule, value: string) {
    if (_rule.required) {
        const phoneRegex = /^1[3-9]\d{9}$/;
        const landlineRegex = /^(0\d{2,3}-\d{7,8})$/;
        if (!phoneRegex.test(value) || !landlineRegex.test(value)) {
            return Promise.reject('格式不正确');
        }
        return Promise.resolve();
    }
    return Promise.resolve();
}

async function validatePhone(_rule: Rule, value: string) {
    console.log(_rule);
    if (_rule.required) {
        if (value === '') {
            return Promise.reject('请输入');
        } else {
            const reg = /^1[123456789]\d{9}$/;
            if (!reg.test(value)) {
                return Promise.reject('手机号格式不正确');
            }
            return Promise.resolve();
        }
    }
    return Promise.resolve();
}

/**
 * 校验车牌号码是否合法
 * @param {string} plateNumber - 待校验的车牌号码
 * @returns {boolean} 是否合法
 */
function isValidPlateNumber(plateNumber) {
    const regularExpressions = [
        // 普通小型汽车（蓝牌）
        /^[\u4e00-\u9fa5]{1}[A-Z]{1}[A-Z_0-9]{5}$/,
        // 新能源汽车（绿牌）
        /^[\u4e00-\u9fa5]{1}[A-Z]{1}[D|F]\d{4}$/,
        // 大型汽车（黄牌）
        /^[\u4e00-\u9fa5]{1}[A-Z]{1}\d{5}$/,
        // 军车（白底黑字）
        /^[\u4e00-\u9fa5]{2}[A-HJ-NP-Z\d]{5}$/,
        // 警车（白底红“警”字）
        /^[\u4e00-\u9fa5]{1}[A-Z]{1}[A-Z\d]{4}[警]$/,
        // 使馆、领事馆车辆（黑底白字，首位为“使”或“领”）
        /^(使|领)[A-Z]{1}[A-Z\d]{5}$/,
        // 港澳入出境车辆（黑底白字，“港”、“澳”开头）
        /^(港|澳)[A-Z\d]{7}$/,
    ];

    return regularExpressions.some(regexp => regexp.test(plateNumber));
}

async function validateCarNumber(_rule: Rule, value: string) {
    if (isValidPlateNumber(value)) return Promise.reject('车牌号不正确');
    return Promise.resolve();
}

function validateEmail(_rule: Rule, value: string) {
    if (_rule.required) {
        const reg = /^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
        if (!reg.test(value)) {
            return Promise.reject('邮箱格式不正确');
        }
        return Promise.resolve();
    }
    return Promise.resolve();
}

async function validateTaxpayer(_rule: Rule, value: string) {
    const reg = /^(?:[0-9A-Z]{18}|[1-9]\d{5}(18|19|20)\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\d|3[01])\d{3}(\d|X|x))$/i;
    if (isNotEmpty(value) && !reg.test(value)) {
        return Promise.reject('纳税人识别编码输入输入不正确');
    }
    return Promise.resolve();
}

async function validateBankCard(_rule: Rule, value: string) {
    const reg = /^[1-9]\d{9,29}$/;
    if (isNotEmpty(value) && !reg.test(value)) {
        return Promise.reject('银行卡号输入不正确');
    }
    return Promise.resolve();
}

function validateIdCard(_rule: Rule, value: string) {
    const reg = /^[1-9]\d{5}(18|19|20)\d{2}(0[1-9]|1[0-2])(0[1-9]|[12][0-9]|3[01])\d{3}[\dXx]$/;

    if (isNotEmpty(value) && !reg.test(value)) return Promise.reject('身份证号码输入不正确');
    return Promise.resolve();
}

export { validatePhone, validateEmail, validateTaxpayer, validateContact, validateBankCard, validateIdCard, validateCarNumber };
